home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / TURBOPASCAL WIN / PAINT.PAK / PAINTDLG.PAS < prev    next >
Pascal/Delphi Source File  |  1992-06-08  |  4KB  |  164 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Pascal for Windows: Paint Demo         }
  4. {   paintdlg unit                                }
  5. {   Copyright (c) 1992 by Borland International  }
  6. {                                                }
  7. {************************************************}
  8.  
  9. unit PaintDlg;
  10.  
  11. { This unit supplies the specialized dialogs for the paint program.
  12. }
  13.  
  14. interface
  15.  
  16. uses ResDef, WinTypes, WinProcs, WObjects;
  17.  
  18. type
  19.  
  20.   PSizeBMInfo = ^TSizeBMInfo;
  21.   TSizeBMInfo = record
  22.     Width, Height: Integer;
  23.     CurrentBMFlag: Integer;
  24.   end;
  25.  
  26.   PSizeBMDialog = ^TSizeBMDialog;
  27.   TSizeBMDialog = object(TDialog)
  28.     constructor Init(AParent: PWindowsObject; AName: PChar; Buf: Pointer);
  29.   end;
  30.  
  31. { Numeric input field }
  32.  
  33.   PNumEdit = ^TNumEdit;
  34.   TNumEdit = object(TEdit)
  35.     MinValue, MaxValue: Longint;
  36.  
  37.     constructor Init(AParent: PWindowsObject; AnId: Integer;
  38.       ATitle: PChar; X, Y, W, H: Integer; Digits: Word;
  39.       AMinValue, AMaxValue: Longint);
  40.     constructor InitResource(AParent: PWindowsObject; ResourceID: Word;
  41.       Digits: Word; AMinValue, AMaxValue: Longint);
  42.     function CanClose: Boolean; virtual;
  43.     function Transfer(DataPtr: Pointer; TransferFlag: Word): Word; virtual;
  44.   end;
  45.  
  46. { Special Radio Buttons }
  47.   
  48.   PIDRadioButton = ^TIDRadioButton;
  49.   TIDRadioButton = object(TRadioButton)
  50.     MyID: Integer;
  51.  
  52.     constructor InitResource(AParent: PWindowsObject; ResourceID: Word);
  53.     function Transfer(DataPtr: Pointer; TransferFlag:Word): Word; virtual;
  54.   end;
  55.  
  56. implementation
  57.  
  58. { TSizeBMDialog }
  59. constructor TSizeBMDialog.Init(AParent: PWindowsObject; AName: PChar;
  60.                                Buf: Pointer);
  61. var
  62.   P: PWindowsObject;
  63. begin
  64.   TDialog.Init(AParent, AName);
  65.  
  66.   TransferBuffer := Buf;
  67.  
  68.   P := New(PNumEdit, InitResource(@Self, id_WidthField, 5, -32768, 32767));
  69.   P := New(PNumEdit, InitResource(@Self, id_HeightField, 5, -32768, 32767));
  70.  
  71.   P := New(PIDRadioButton, InitResource(@Self, id_StretchBM));
  72.   P := New(PIDRadioButton, InitResource(@Self, id_PadBM));
  73.   P := New(PGroupBox, InitResource(@Self, id_CurrentBMGroup));
  74. end;
  75.  
  76. { TNumEdit }
  77.  
  78. constructor TNumEdit.Init(AParent: PWindowsObject; AnId: Integer;
  79.   ATitle: PChar; X, Y, W, H: Integer; Digits: Word;
  80.   AMinValue, AMaxValue: Longint);
  81. begin
  82.   TEdit.Init(AParent, AnId, ATitle, X, Y, W, H, Digits + 1, False);
  83.   MinValue := AMinValue;
  84.   MaxValue := AMaxValue;
  85. end;
  86.  
  87. constructor TNumEdit.InitResource(AParent: PWindowsObject;
  88.   ResourceID: Word; Digits: Word; AMinValue, AMaxValue: Longint);
  89. begin
  90.   TEdit.InitResource(AParent, ResourceID, Digits + 1);
  91.   MinValue := AMinValue;
  92.   MaxValue := AMaxValue;
  93. end;
  94.  
  95. function TNumEdit.CanClose: Boolean;
  96. var
  97.   Valid: Boolean;
  98.   ValCode: Integer;
  99.   Value: LongInt;
  100.   Text: array[0..15] of Char;
  101.   Msg: array[0..63] of Char;
  102. begin
  103.   GetText(Text, SizeOf(Text));
  104.   Val(Text, Value, ValCode);
  105.   Valid := (ValCode = 0) and
  106.     (Value >= MinValue) and (Value <= MaxValue);
  107.   if not Valid then
  108.   begin
  109.     WVSPrintF(Msg, 'Number must be between %ld and %ld', MinValue);
  110.     MessageBox(HWindow, Msg, 'Data error', mb_Ok or mb_IconExclamation);
  111.     SetSelection(0, MaxInt);
  112.     SetFocus(HWindow);
  113.   end;
  114.   CanClose := Valid;
  115. end;
  116.  
  117. function TNumEdit.Transfer(DataPtr: Pointer; TransferFlag: Word): Word;
  118. var
  119.   ValCode: Integer;
  120.   Text: array[0..15] of Char;
  121. begin
  122.   case TransferFlag of
  123.     tf_GetData:
  124.       begin
  125.         GetText(Text, SizeOf(Text));
  126.         Val(Text, Integer(DataPtr^), ValCode);
  127.       end;
  128.     tf_SetData:
  129.       begin
  130.     Str(Integer(DataPtr^), Text);
  131.         SetText(Text);
  132.       end;
  133.   end;
  134.   Transfer := SizeOf(Integer);
  135. end;
  136.  
  137. { TIDRadioButton }
  138. constructor TIDRadioButton.InitResource(AParent: PWindowsObject;
  139.   ResourceID: Word);
  140. begin
  141.   TRadioButton.InitResource(AParent, ResourceID);
  142.   MyID := ResourceID;
  143. end;
  144.  
  145. function TIDRadioButton.Transfer(DataPtr: Pointer; TransferFlag:Word): Word;
  146. begin
  147.   Transfer := 0;
  148.   case TransferFlag of
  149.     tf_GetData:
  150.       if GetCheck = bf_Checked then
  151.       begin
  152.     Integer(DataPtr^) := MyID;
  153.     Transfer := SizeOf(Integer);
  154.       end;
  155.     tf_SetData:
  156.        if (Integer(DataPtr^) = MyID) or (Integer(DataPtr^) = bf_Checked) then
  157.        begin
  158.      Check;
  159.      Transfer := SizeOf(Integer);
  160.        end;
  161.   end;
  162. end;
  163.  
  164. end.